{
  //当声明类之后, 会多一个类型出来
  class Person{
    //属性  为实例对象声明属性
    name: string;
    age: number;

    //方法
    //构造方法
    constructor(name: string, age: number){
      this.name = name;
      this.age = age;
    }

    //方法
    intro(): void{
      console.log(`我是${this.name},今年${this.age}`);
    }
  }

  //实例化对象
  // let me: Person = new Person('xxx', 10);
  class Child extends Person{
    skill: string;

    constructor(name: string, age: number, skill: string){
      super(name, age);
      this.skill = skill;
    }

    sanmei(){
      console.log('可以吐火');
    }

  }

  //实例化
  let child: Child = new Child('红孩儿', 300, '三昧真火');

  child.sanmei();
}


{
  //声明一个类
  class CA{
    public a:string = 'aaa';   //公开的
    protected b:string = 'bbb';//受保护的
    private c:string = 'ccc';  //私有的

    fn(){
      console.log(this.a);
      console.log(this.b);
      console.log(this.c);
    }
  }

  class CB extends CA{
    fn2(){
      console.log(this.a);
      console.log(this.b);
      // console.log(this.c); //属性“c”为私有属性，只能在类“CA”中访问
    }
  }

  //实例化对象
  let obj = new CA();
  
  // obj.fn();
  // console.log(obj.a);
  // console.log(obj.b);//属性“b”受保护，只能在类“CA”及其子类中访问
  // console.log(obj.c);//属性“c”为私有属性，只能在类“CA”中访问


}